#ifndef MERGESORT_H
#define MERGESORT_H

namespace ED
{
template<typename T>
class MergeSort
{
    void m_sort(int *vet, int *aux, int esq, int dir)
    {
        if (dir <= esq) return;
        int meio = (dir + esq) >> 1;
        m_sort(vet, aux, esq, meio); // Primeira chamada
        m_sort(vet, aux, meio+1, dir); // Segunda chamada
        merge(vet, aux, esq, meio, dir); // Combina as metades
    }
    void mergesort(int *vet, int n)
    {
        int *aux = new int[n];
        m_sort(vet, aux , 0, n-1);
        delete aux;
    }
};
}

#endif // MERGESORT_H
